"""
🚀 启动项目验证器 - 您的个人商业验证助手！

此工作流通过以下方式帮助创业者验证其创业想法：
1. 明确和优化核心商业模式
2. 与现有解决方案比较原创性
3. 定义清晰的使命和目标
4. 进行全面的市场调研与分析

为什么这很有用？
--------------------------------------------------------------------------------
• 在投入资源之前获得对您创业想法的客观反馈
• 了解您的总可寻址市场和目标细分市场
• 验证关于市场机会和竞争的假设
• 定义明确的使命和目标以指导执行

谁应该使用它？
--------------------------------------------------------------------------------
• 创业者和初创公司创始人
• 产品经理和商业策略师
• 创新团队
• 进行初步筛选的天使投资者和风投

使用案例示例：
--------------------------------------------------------------------------------
• 新产品/服务验证
• 市场机会评估
• 竞争对手分析
• 商业模式验证
• 目标客户细分
• 使命/愿景优化

该工作流将通过 AI 驱动的分析和研究引导您验证您的创业想法。利用这些见解来完善您的概念和商业计划！
"""

import asyncio
from typing import Any

from configs.basic_config import ALI_GENERATION_MODEL, AGENT_URL, ALI_DASHSCOPE_API_KEY

from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.models.openailike import OpenAILike
from agno.tools.googlesearch import GoogleSearchTools
from agno.utils.pprint import pprint_run_response
from agno.workflow.types import WorkflowExecutionInput
from agno.workflow.workflow import Workflow
from pydantic import BaseModel, Field


# --- 响应模型 ---
class IdeaClarification(BaseModel):
    originality: str = Field(..., description="想法的原创性。")
    mission: str = Field(..., description="公司的使命。")
    objectives: str = Field(..., description="公司的目标。")


class MarketResearch(BaseModel):
    total_addressable_market: str = Field(
        ..., description="总可寻址市场 (TAM)。"
    )
    serviceable_available_market: str = Field(
        ..., description="可服务市场 (SAM)。"
    )
    serviceable_obtainable_market: str = Field(
        ..., description="可获取市场 (SOM)。"
    )
    target_customer_segments: str = Field(..., description="目标客户细分。")


class CompetitorAnalysis(BaseModel):
    competitors: str = Field(..., description="识别出的竞争者列表。")
    swot_analysis: str = Field(..., description="每个竞争者的 SWOT 分析。")
    positioning: str = Field(
        ..., description="相对于竞争者的潜在定位。"
    )


class ValidationReport(BaseModel):
    executive_summary: str = Field(
        ..., description="验证的执行摘要。"
    )
    idea_assessment: str = Field(..., description="对创业想法的评估。")
    market_opportunity: str = Field(..., description="市场机会分析。")
    competitive_landscape: str = Field(
        ..., description="竞争格局概述。"
    )
    recommendations: str = Field(..., description="战略建议。")
    next_steps: str = Field(..., description="推荐的下一步行动。")


# --- 代理定义 ---
idea_clarifier_agent = Agent(
    name="想法澄清者",
    model=OpenAILike(id=ALI_GENERATION_MODEL, name=ALI_GENERATION_MODEL, api_key=ALI_DASHSCOPE_API_KEY, base_url=AGENT_URL),
    instructions=[
        "根据用户提供的创业想法，您的目标是优化该想法。",
        "通过与现有概念比较来评估想法的原创性。",
        "定义公司的使命和目标。",
        "提供关于核心商业模式的清晰、可操作的见解。",
    ],
    add_history_to_context=True,
    add_datetime_to_context=True,
    output_schema=IdeaClarification,
    debug_mode=False,
)

market_research_agent = Agent(
    name="市场研究员",
    model=OpenAILike(id=ALI_GENERATION_MODEL, name=ALI_GENERATION_MODEL, api_key=ALI_DASHSCOPE_API_KEY, base_url=AGENT_URL),
    tools=[GoogleSearchTools()],
    instructions=[
        "您会收到一个创业想法以及公司的使命和目标。",
        "估算总可寻址市场 (TAM)、可服务市场 (SAM) 和可获取市场 (SOM)。",
        "定义目标客户细分及其特征。",
        "搜索网络资源和数据以支持您的分析。",
        "提供具体的市场规模估计，并附上数据来源。",
    ],
    add_history_to_context=True,
    add_datetime_to_context=True,
    output_schema=MarketResearch,
)

competitor_analysis_agent = Agent(
    name="竞争对手分析师",
    model=OpenAILike(id=ALI_GENERATION_MODEL, name=ALI_GENERATION_MODEL, api_key=ALI_DASHSCOPE_API_KEY, base_url=AGENT_URL),
    tools=[GoogleSearchTools()],
    instructions=[
        "您会收到一个创业想法和市场研究数据。",
        "识别市场上的现有竞争者。",
        "对每个竞争者进行优势、劣势、机会和威胁 (SWOT) 分析。",
        "评估初创公司的潜在竞争定位。",
        "搜索最新的竞争者信息和市场定位。",
    ],
    add_history_to_context=True,
    add_datetime_to_context=True,
    output_schema=CompetitorAnalysis,
    debug_mode=False,
)

report_agent = Agent(
    name="报告生成器",
    model=OpenAILike(id=ALI_GENERATION_MODEL, name=ALI_GENERATION_MODEL, api_key=ALI_DASHSCOPE_API_KEY, base_url=AGENT_URL),
    instructions=[
        "您会收到关于创业想法的全面数据，包括澄清、市场研究和竞争对手分析。",
        "综合所有信息，生成一份全面的验证报告。",
        "提供清晰的执行摘要、评估和可操作的建议。",
        "以专业的方式结构化报告，包含清晰的部分和洞察。",
        "包括针对创业者的具体下一步行动。",
    ],
    add_history_to_context=True,
    add_datetime_to_context=True,
    output_schema=ValidationReport,
    debug_mode=False,
)


# --- 执行函数 ---
async def startup_validation_execution(
    workflow: Workflow,
    execution_input: WorkflowExecutionInput,
    startup_idea: str,
    **kwargs: Any,
) -> str:
    """执行完整的创业想法验证工作流"""

    # 获取输入
    message: str = execution_input.input
    idea: str = startup_idea

    if not idea:
        return "❌ 未提供创业想法"

    print(f"🚀 开始验证创业想法：{idea}")
    print(f"💡 验证请求：{message}")

    # 第一阶段：想法澄清
    print("\n🎯 第一阶段：想法澄清与优化")
    print("=" * 60)

    clarification_prompt = f"""
    {message}

    请分析并优化以下创业想法：

    创业想法：{idea}

    评估：
    1. 与现有解决方案相比，该想法的原创性如何？
    2. 为该公司定义一个清晰的使命声明
    3. 列出具体、可衡量的目标
    提供如何加强和聚焦核心概念的见解。
    """

    print("🔍 分析并优化创业概念...")

    try:
        clarification_result = await idea_clarifier_agent.arun(clarification_prompt)
        idea_clarification = clarification_result.content

        print("✅ 想法澄清完成")
        print(f"📝 使命：{idea_clarification.mission[:100]}...")

    except Exception as e:
        return f"❌ 想法澄清失败：{str(e)}"

    # 第二阶段：市场研究
    print("\n📊 第二阶段：市场研究与分析")
    print("=" * 60)

    market_research_prompt = f"""
    根据以下经过优化的创业想法和澄清结果，进行全面的市场研究：
    创业想法：{idea}
    原创性：{idea_clarification.originality}
    使命：{idea_clarification.mission}
    目标：{idea_clarification.objectives}
    请研究并提供：
    1. 总可寻址市场 (TAM) - 整体市场规模
    2. 可服务市场 (SAM) - 您可以服务的部分
    3. 可获取市场 (SOM) - 现实的市场份额
    4. 目标客户细分及其详细特征
    使用网络搜索找到当前的市场数据和趋势。
    """

    print("📈 研究市场规模和客户细分...")

    try:
        market_result = await market_research_agent.arun(market_research_prompt)
        market_research = market_result.content

        print("✅ 市场研究完成")
        print(f"🎯 TAM: {market_research.total_addressable_market[:100]}...")

    except Exception as e:
        return f"❌ 市场研究失败：{str(e)}"

    # 第三阶段：竞争对手分析
    print("\n🏢 第三阶段：竞争格局分析")
    print("=" * 60)

    competitor_prompt = f"""
    基于以下创业想法和市场研究结果，分析竞争格局：
    创业想法：{idea}
    TAM: {market_research.total_addressable_market}
    SAM: {market_research.serviceable_available_market}
    SOM: {market_research.serviceable_obtainable_market}
    目标细分：{market_research.target_customer_segments}
    请研究并提供：
    1. 识别直接和间接竞争者
    2. 对每个主要竞争者进行 SWOT 分析
    3. 评估初创公司的潜在竞争定位
    4. 市场空白和机会
    使用网络搜索找到当前的竞争者信息。
    """

    print("🔎 分析竞争格局...")

    try:
        competitor_result = await competitor_analysis_agent.arun(competitor_prompt)
        competitor_analysis = competitor_result.content

        print("✅ 竞争对手分析完成")
        print(f"🏆 定位：{competitor_analysis.positioning[:100]}...")

    except Exception as e:
        return f"❌ 竞争对手分析失败：{str(e)}"

    # 第四阶段：最终验证报告
    print("\n📋 第四阶段：综合验证报告")
    print("=" * 60)

    report_prompt = f"""
    将所有研究和分析综合成一份全面的创业验证报告：

    创业想法：{idea}

    想法澄清：
    - 原创性：{idea_clarification.originality}
    - 使命：{idea_clarification.mission}
    - 目标：{idea_clarification.objectives}
    市场研究：
    - TAM：{market_research.total_addressable_market}
    - SAM：{market_research.serviceable_available_market}
    - SOM：{market_research.serviceable_obtainable_market}
    - 目标细分：{market_research.target_customer_segments}
    竞争对手分析：
    - 竞争者：{competitor_analysis.competitors}
    - SWOT：{competitor_analysis.swot_analysis}
    - 定位：{competitor_analysis.positioning}
    生成一份专业的验证报告，包含：
    1. 执行摘要
    2. 想法评估（优势/劣势）
    3. 市场机会分析
    4. 竞争格局概述
    5. 战略建议
    6. 针对创业者的具体下一步行动
    """

    print("📝 生成全面的验证报告...")

    try:
        final_result = await report_agent.arun(report_prompt)
        validation_report = final_result.content

        print("✅ 验证报告完成")

    except Exception as e:
        return f"❌ 生成最终报告失败：{str(e)}"

    # 最终总结
    summary = f"""
    🎉 创业想法验证完成！
    📊 验证摘要：
    • 创业想法：{idea}
    • 想法澄清：✅ 已完成
    • 市场研究：✅ 已完成
    • 竞争对手分析：✅ 已完成
    • 最终报告：✅ 已生成

    📈 关键市场洞察：
    • TAM：{market_research.total_addressable_market[:150]}...
    • 目标细分：{market_research.target_customer_segments[:150]}...

    🏆 竞争定位：
    {competitor_analysis.positioning[:200]}...

    📋 综合验证报告：

    ## 执行摘要
    {validation_report.executive_summary}

    ## 想法评估
    {validation_report.idea_assessment}

    ## 市场机会
    {validation_report.market_opportunity}

    ## 竞争格局
    {validation_report.competitive_landscape}

    ## 战略建议
    {validation_report.recommendations}

    ## 下一步行动
    {validation_report.next_steps}

    ⚠️ 免责声明：此验证仅供信息参考。在做出投资决策前，请进行额外的尽职调查。
    """

    return summary


# --- 工作流定义 ---
startup_validation_workflow = Workflow(
    name="创业想法验证器",
    description="通过市场研究和竞争分析进行全面的创业想法验证",
    db=SqliteDb(
        session_table="workflow_session",
        db_file="tmp/workflows.db",
    ),
    steps=startup_validation_execution,
    session_state={},  # 初始化空的工作流会话状态
)


if __name__ == "__main__":

    async def main():
        from rich.prompt import Prompt

        # 从用户获取想法
        idea = Prompt.ask(
            "[bold]您的创业想法是什么？[/bold]\n✨",
            default="一个用皮革制作的圣诞装饰品市场",
        )

        print("🧪 使用新的工作流结构测试创业想法验证器")
        print("=" * 70)

        result = await startup_validation_workflow.arun(
            input="请使用全面的市场研究和竞争分析验证此创业想法",
            startup_idea=idea,
        )

        pprint_run_response(result, markdown=True)

    asyncio.run(main())